Lze ve FB 1.5 prevest tabulku z radku na sloupce?

Otázka od: little_bobes@centrum.cz

26. 8. 2004 12:50

Zdravim,
predem se omlouvam za krkolomny subjekt, ale nevim, jak jinat toto nazvat.
Dostala se mi do ruky zhruba nasledujici databaze (FB 1.5):

T_SEZNAM_KODU
KOD SL1 SL2 ID_1
==== === === ===
POL1 neco neco 1
POL2 neco neco 2
POL3 neco neco 3
...

T_SEZNAM_VELICIN
VELICINA HODNOTA ID_2
======== ======== ===
BARVA ZELENA 11
BARVA BILA 12
VYROBCE XY123 13
PRUREZ 10 14
...

T_SEZNAM_TYPU
TYP ID_3
==== ===
KABEL 21
MOTOR 22
...

T_PRIRAZENI_TYP_VELICINA
S_ID_3 S_ID_2
===== =====
21 11
21 13
21 14
22 12
22 13
...

T_PROPOJ_KOD_TYP
S_ID_1 S_ID_3
===== =====
1 21
3 22
...

Nyni bych potreboval ciste pomoci SQL (nejakou procedurou) vytvorit
nasledujici vystup (napr. pro ID_3 = 21)
KOD SL1 SL2 ID_1 BARVA VYROBCE PRUREZ
==== === === === ====== ======== =======
POL1 neco neco 1 ZELENA XY123 10

Je mi jasne, ze pro kazde ID_3 muze byt pocet velicin ruzny, ale ja to
potrebuji vzdy pouze pro jedno ID_3.

Je vubec toto ciste pomoci SQL mozne?
Nebo obecneji: lze si v SQL vytvorit z jednotlivych radku sloupce?
(v T_SEZNAM_VELICIN je ve VELICINA jmeno sloupce a v HODNOTA je jeho hodnota
a ja bych zadal pouze: select * from nejaka_procedura_nebo_neco
(jako_parametr_ID_3_cislo_21) ).

Diky i za sebemensi rady a nazory.
S pozdravem
Bob (D4 c/s, FB1.5)



Odpovedá: Slavomir Skopalik

26. 8. 2004 13:43

> Nebo obecneji: lze si v SQL vytvorit z jednotlivych radku
> sloupce? (v T_SEZNAM_VELICIN je ve VELICINA jmeno sloupce a v
> HODNOTA je jeho hodnota a ja bych zadal pouze: select * from
> nejaka_procedura_nebo_neco
> (jako_parametr_ID_3_cislo_21) ).

Moc te sice nechapu, ale zkusim odpovedet.
Pokud chces mit dynamicky pocet sloupcu, tak musis dynamicky generovat
dotaz.
Pak to samozrejme jde, napriklad takto:

SELECT
 ( SELECT tValue FROM table2 WHERE tKye='PRUMER' AND id=T1.id),
 ( SELECT tValue FROM table2 WHERE tKye='PLOCHA' AND id=T1.id),
 ( SELECT tValue FROM table2 WHERE tKye='xxx' AND id=T1.id),
 ( SELECT tValue FROM table2 WHERE tKye='yyy' AND id=T1.id)
FROM table1 T1 WHERE id=zzz

nebo obdobne
pokud je tKye primarni klic.

SELECT
 ( SELECT tValue FROM table2 WHERE tKye='PRUMER' ),
 ( SELECT tValue FROM table2 WHERE tKye='PLOCHA' ),
 ( SELECT tValue FROM table2 WHERE tKye='xxx'),
 ( SELECT tValue FROM table2 WHERE tKye='yyy')
FROM rdb$database

Je to odpoved ?

 Slavek


Odpovedá: Lstiburek Pavel

26. 8. 2004 15:37

To co chces je transpozice tabulky, v FB urcite nejde (nejake nastroje jsou v
ORACLE a neco snad v Accessu).
Pokud to lze udelat na klientovi, zkus se podivat na ActiveX PivotTable.

Pavel